前面兩天提到的 ?? 和 ?. 都是針對 undefined 和 null 的值做一些運算。
?? 是將左側 undefined 和 null 回傳一個 default 值
undeinfed ?? 1 // 1
null ?? 1 // 1
?. 則是將讓左側為 undefined 和 null 的 property 回傳 undefined
let Undefined
Undefined?.property // undefined
let Null = null
Null?.property // undefined
這樣看起來 undefined 和 null 在使用上好像都一樣?究竟這兩者有什麼相同和不同的地方呢?我們來比較一下
皆為
falsy values| \ | undefined |
null |
|---|---|---|
| 定義 | 未定義 | 定義為空值 |
typeof |
'undefined' | 'object' |
| JSON | 無效 | 有效 |
| 序列化 | JSON.stringify({ property: undefined }) // {} |
JSON.stringify({ property: null }) // { property: null } |
依照場景下的意義
undefined 代表初始值 未被分配 或 定義null 代表 空 或 未知值得一提的是 TypeScript team 不使用 null 只用 undefined 也沒造成什麼問題,同時不同的 Library 有不同的作法,我們可以用 undeinfed == null 來避免區分他們。
Head to Head Comparison Between Undefined and Null
Null vs. Undefined
Data types